// pages/storeInformation/storeInformation.js
const app = getApp();
var QQMapWX = require('../../../utils/qqmap-wx-jssdk.js'),
    qqmapsdk;
import api from '../../../utils/util.js';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    ent: app.globalData.ent,
    statusBarHeight: app.globalData.statusBarHeight,
    fullHeight: app.globalData.fullcontain,
    navmess: {
      navtitle: "门店信息",
      backhide: 0,
      topheight: 1
    },
    value: "", // 门店地址
    type: 0, // 0=>正常访问 1=>修改预约
    token: '',// 登录唯一凭证
    storeId: '', // 门店Id
    sign: '',// 预约sign
    selectName: [],// 城市名称 (下拉列表)
    cityId: [], // 城市 (下拉列表)
    index: 0,  // 门店下拉列表 索引
    currentLocation: "", // 当前用户所在位置
    // 门店定位列表
    location: [],
    // 门店地址信息
    allplace: [],
    // 门店信息（修改）
    oneAllplace: {},
  },
  pageto: function (e) {
    var url = e.currentTarget.dataset.url,
      data = e.currentTarget.dataset.datobj;
    app.goto(url, data);
  },
  // 城市联动器
  bindPickerChange: function (e) {
    let Idx = e.detail.value,
      ent = this.data.ent, // 企业编号
      cityId = this.data.cityId[Idx]; // 获取城市Id
    console.log('picker发送选择改变，携带值为', this.data.selectName[Idx]);
    this.setData({ index: Idx });
    this.getStoreList(ent, cityId); // 根据选中城市获取门店列表
  },
  // 获取用户输入的地址信息
  userNameInput: function (e) {
    let value = (e.detail.value).replace(/\+s/g, "");
    if (value == "") { this.setData({ value: "" });}; //输入空格就为空
    let patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~！@#￥%……&*（）——\-+={}|《》？：“”【】、；‘'，。、]/im;// 特殊字符
    if (patrn.test(value)) { this.toast("门店地址名称无效"); return; } // 过滤特殊字符
    this.getStoreList(this.data.ent, this.data.cityId[this.data.index], value); //根据用户输入的门店信息获取门店列表
  },
  // 获取可选 城市
  getOpctionCity: function () {
    let ent = this.data.ent;
    api.post('/mini/store/storeCity', { ent: ent }).then(res => {
      if (res.code != 200) { this.toast("城市列表获取失败"); return; }
      let data = res.result;
      console.log("城市列表", data)
      let cityId = [], cityName = [];
      for (var i in data) {
        cityId[i] = data[i].cityId;
        cityName[i] = data[i].cityName;
      }
      this.setData({ cityId, cityId, selectName: cityName });
      this.getStoreList(ent, cityId[0]); // 获取门店列表
    })
  },
  // 获取门店地址以及处理 必选: (ent,cityId) 可选: (name)
  getStoreList: function (ent, cityId, name) {
    if (ent == "" || ent == undefined || cityId == "" || cityId == undefined) { this.toast("缺少必选字段"); return; }
    let obj = name == "" || name == undefined ? { ent: ent, cityId: cityId } : { ent: ent, cityId: cityId, name: name };//用来区分搜索的还是默认加载的

    api.post('/mini/store/storeAddressList', obj).then(res => {
      console.log("获取门店地址：", res);
      if (res.code != 200) { this.toast("门店加载失败"); return; }
      let data = JSON.parse(JSON.stringify(res.result));
      this.userLocalAuthorize().then((res) => { // 返回用户的位置信息
        for (var i in data) {
          // 门店
          let storeLat = data[i].lat, // 伟度
              storeLng = data[i].lng;// 经度
          // 距离 (km)
          data[i].Distance = this.distance(storeLat, storeLng, res.lat, res.long) + "km";
        }
        this.ReverseLocalction(res.lat+","+res.long); // 逆向解析地址
        this.setData({ allplace: data });
      })
    })
  },
  // 计算公里数 
  distance: function (la1, lo1, la2, lo2) {
    var La1 = la1 * Math.PI / 180.0;
    var La2 = la2 * Math.PI / 180.0;
    var La3 = La1 - La2;
    var Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0;
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2)));
    s = s * 6378.137;
    s = Math.round(s * 10000) / 10000;
    s = s.toFixed(2);
    return s;
  },
  // 用户授权定位
  userLocalAuthorize: function () {
    return new Promise((result, err) => {
      wx.authorize({
        scope: 'scope.userLocation', // 用户地理位置
        success: res => {
          this.getUserLatAndlng(result);
        }, fail: () => {
          console.log("用户未授权地理位置");
        }
      })
    })
  },
  // 获取用户经度纬度
  getUserLatAndlng: function (result) {
    wx.getLocation({
      type: 'wgs84', // 坐标类型
      isHighAccuracy: true,// 开启精度定位
      success: res => {
        let localction = { lat: res.latitude, long: res.longitude };
        result(localction);//回调
      }
    })
  },
  // 用户点击重新获取位置
  getUserLocalrewrite: function(){
    this.getStoreList(this.data.ent, this.data.cityId[this.data.index]);
  },
  // 公用toast
  toast: function (title, icon) {
    wx.showToast({ title: title, icon: icon == undefined ? 'none' : icon });
  },
  // 逆向解析地址
  ReverseLocalction: function(location){
    var self = this;
    qqmapsdk.reverseGeocoder({
      location: location,
      success: res=>{
        console.log("地址解析成功",res);
        self.setData({currentLocation: res.result.address});
      }
     })
  },
  // 选中门店
  toSelectProject: function(e){
    let store = e.currentTarget.dataset.store,oneAllplace = this.data.oneAllplace, // 门店id
        obj = {};
    if(this.data.storeId == store.storeId){// 修改=>选择的是同一家不清除数据
      obj = {
        type: this.data.type, // 0=>正常流程 1=>修改
        store: store, // 门店信息
        settingData: oneAllplace,// 保留用户修改信息
      };
    }else{
      obj = {
        type: this.data.type, // 0=>正常流程 1=>修改
        store: store, // 门店信息
      };
    }
    console.log(obj);
    wx.setStorageSync('mineInfo', obj); // 由于switchTab不能带参跳转 把选择的门店Id放在本地
    wx.switchTab({url: '/pages/orders/order/order'});
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let type = options.type==undefined||options.type==''?0:1,// 0=>正常流程 1=>修改
    token = wx.getStorageSync('token'); // 获取登录唯一凭证
    this.setData({type: type, token: token, sign: options.sign}); // 修改當前訪問方式
    this.getOpctionCity();
    // 实例化API核心类
    qqmapsdk = new QQMapWX({key: 'P5DBZ-M3GWJ-ICVFE-FNYNC-QTRPS-OVBQJ'});
    if(type == 1){ // 修改流程
      this.getActiveData(this.data.token, this.data.sign); // 获取修改数据
    }
  },
  // 修改=>返回用户所有数据 oneAllplace
  getActiveData: function(token,sign, ){
    api.post('/mini/my/order/echo',{token: token, sign: sign}).then(res=>{
      if(res.code != 200){wx.showToast({title: '请求失败'}); return;}
      this.setData({storeId: res.result.storeId, oneAllplace: res.result});// 用于判断是否选择同一家店
      
      console.log("返回用户回显数据",res.result);
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})